package br.usp.ime.ingpos.modelo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Usuario
    implements
        Serializable
{
    private static final long serialVersionUID = 5653550355165213879L;

    @Id
    @GeneratedValue
    private Long usuarioID;

    @Column( unique = true )
    private String email;

    @Column( length = 32 )
    private String senha;

    @Embedded
    private DadosPessoais dadosPessoais;

    @ManyToOne( optional = false )
    private Perfil perfil;

    @Column( length = 120, unique = true, nullable = false )
    private String hash;

    public Usuario()
    {
        this.dadosPessoais = new DadosPessoais();
    }

    protected Usuario(Usuario usuario) {
    	Class<Usuario> obj = Usuario.class;
    	java.lang.reflect.Field[] fields = obj.getDeclaredFields();
    	for(int i = 0; i < fields.length; i++){
    		fields[i].setAccessible(true);
    		try{
    			System.out.println(fields[i].getName());
    			fields[i].set(this, fields[i].get(usuario));
    		}
    		catch (Exception e) {
    			
    		}
    	}
    /*	this.dadosPessoais = usuario.dadosPessoais;
    	this.email = usuario.email;
    	this.hash = usuario.hash;
    	this.perfil = usuario.perfil;
    	this.senha = usuario.senha;
    	this.usuarioID = usuario.usuarioID;*/
	}

	public Long getUsuarioID()
    {
        return usuarioID;
    }

    public String getEmail()
    {
        return email;
    }

    public void setEmail(
        String email )
    {
        this.email = email;
    }

    public String getSenha()
    {
        return senha;
    }

    public void setSenha(
        String senha )
    {
        this.senha = senha;
    }

    public Perfil getPerfil()
    {
        return perfil;
    }

    public void setPerfil(
        Perfil perfil )
    {
        this.perfil = perfil;
    }

    public DadosPessoais getDadosPessoais()
    {
        return dadosPessoais;
    }

    public void setDadosPessoais(
        DadosPessoais dadosPessoais )
    {
        this.dadosPessoais = dadosPessoais;
    }

    public void setHash(
        String hash )
    {
        this.hash = hash;
    }

    public String getHash()
    {
        return hash;
    }
}
